#pragma once

struct EKey
{
	enum Mouse
	{
	    LMB = 0,
	    RMB,
	    WheelUp,
	    WheelDown
	};

	enum Keyboard
	{
	    k_0 = SDLK_0,        //!< k_0
	    k_1,        //!< k_1
	    k_2,        //!< k_2
	    k_3,        //!< k_3
	    k_4,        //!< k_4
	    k_5,        //!< k_5
	    k_6,        //!< k_6
	    k_7,        //!< k_7
	    k_8,        //!< k_8
	    k_9,        //!< k_9
	    k_a = SDLK_a,  //!< k_a
	    k_b,        //!< k_b
	    k_c,        //!< k_c
	    k_d,        //!< k_d
	    k_e,        //!< k_e
	    k_f,        //!< k_f
	    k_g,        //!< k_g
	    k_h,        //!< k_h
	    k_i,        //!< k_i
	    k_j,        //!< k_j
	    k_k,        //!< k_k
	    k_l,        //!< k_l
	    k_m,        //!< k_m
	    k_n,        //!< k_n
	    k_o,        //!< k_o
	    k_p,        //!< k_p
	    k_q,        //!< k_q
	    k_r,        //!< k_r
	    k_s,        //!< k_s
	    k_t,        //!< k_t
	    k_u,        //!< k_u
	    k_v,        //!< k_v
	    k_w,        //!< k_w
	    k_x,        //!< k_x
	    k_y,        //!< k_y
	    k_z,        //!< k_z
	    k_space = SDLK_SPACE,    //!< k_space
	    k_rshift = SDLK_RSHIFT,   //!< k_rshift
	    k_lshift = SDLK_LSHIFT,   //!< k_lshift
	    k_ralt = SDLK_RALT,     //!< k_ralt
	    k_lalt = SDLK_LALT,     //!< k_lalt
	    k_rctrl = SDLK_RCTRL,    //!< k_rctrl
	    k_lctrl = SDLK_LCTRL,    //!< k_lctrl
	    k_enter = SDLK_RETURN,    //!< k_enter
	    k_backspace = SDLK_BACKSPACE,    //!< k_backspace
	    k_tab = SDLK_TAB,      //!< k_tab
	    k_console = SDLK_BACKQUOTE,  //!< k_console
	    k_up = SDLK_UP,       //!< k_up
	    k_down = SDLK_DOWN,     //!< k_down
	    k_left = SDLK_LEFT,     //!< k_left
	    k_right = SDLK_RIGHT,    //!< k_right
	    k_pageup = SDLK_PAGEUP,   //!< k_pageup
	    k_pagedown = SDLK_PAGEDOWN, //!< k_pagedown
	    k_minus = SDLK_MINUS,
	    k_equals = SDLK_EQUALS,
	    k_semicolon = SDLK_SEMICOLON,
	    k_quote = SDLK_QUOTE,
	    k_comma = SDLK_COMMA,
	    k_printscreen = SDLK_PRINT,
	    k_f1 = SDLK_F1,
	    k_f2,
	    k_f3,
	    k_f4,
	    k_f5,
	    k_f6,
	    k_f7,
	    k_f8,
	    k_f9,
	    k_f10,
	    k_f11,
	    k_f12,
	    k_f13,
	    k_f14,
	    k_f15
	};
};

/*--------------------------------------------------------------------------*/

class IInput
{
public:
	/*--------------------------------------------------------------------------*/
	virtual void OnUpdate() = 0;
	virtual bool GetKeyState(uint keyToCheck) const = 0;
	virtual void SetKeyState(uint keyToCheck, bool state) = 0;
	/*--------------------------------------------------------------------------*/
};